#ifndef FOLDERREPOSITORY_H
#define FOLDERREPOSITORY_H

#include <QObject>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QString>
#include <QList>
#include <QJsonArray>
#include "database/database_manager.h"

// 前向声明
struct KmsFolder;
struct KmsFile;

class FolderRepository
{
public:
    explicit FolderRepository(QSqlDatabase &database, const QString &currentUserId = QString());
    
    // 基本CRUD操作
    bool insert(const KmsFolder &folder);
    bool update(const KmsFolder &folder);
    bool remove(const QString &folderId);
    KmsFolder findById(const QString &folderId);
    KmsFolder findByExactPath(const QString &path);
    QList<KmsFolder> findByPath(const QString &path);
    QList<KmsFolder> findAll();
    
    // 查询子元素
    QList<KmsFolder> findSubFoldersByFolderId(const QString &folderId);
    QList<KmsFile> findSubFilesByFolderId(const QString &folderId);
    
    // 状态管理
    bool updateStatus(const QString &folderId, int status);
    
    // 同步操作
    bool syncFromJson(const QJsonArray &foldersData);
    
private:
    QSqlDatabase &m_database;
    QString m_currentUserId;
    
    bool isDatabaseConnected() const;
    KmsFolder mapFromQuery(const QSqlQuery &query) const;
};

#endif // FOLDERREPOSITORY_H

